import React, { Component } from 'react';
import { connect } from 'dva';
import { formatMessage, FormattedMessage } from 'umi/locale';
import { Checkbox, Alert,Button,Form } from 'antd';
import Link from 'umi/link';
import Login from '../../components/Login';
import styles from './Login.less';
import { tenantMode, captchaMode } from '../../defaultSettings';

const { Tab, TenantId, UserName, Password, Captcha, Submit } = Login;

const FormItem = Form.Item;

//connect 方法返回的也是一个 React 组件，通常称为容器组件。因为它是原始 UI 组件的容器，即在外面包了一层 State。
//connect 方法传入的第一个参数是 mapStateToProps 函数，该函数需要返回一个对象，用于建立 State 到 Props 的映射关系。
//connect接受一个函数,返回一个函数.将状态映射到属性
//第一个函数会注入全部的models，你需要返回一个新的对象，挑选该组件所需要的models。
//@是es7加入的功能.修饰器是一个对类进行处理的函数。修饰器函数的第一个参数，就是所要修饰的目标类。
@connect(({ login, loading }) => ({
  login,
  submitting: loading.effects['login/login'],
}))//紧跟要修饰的UI,将状态映射进来
class LoginPage extends Component {
  state = {
    type: 'account',
    autoLogin: true,
  };

  onTabChange = type => {
    this.setState({ type });
  };

  onGetCaptcha = () =>
    new Promise((resolve, reject) => {
      this.loginForm.validateFields(['mobile'], {}, (err, values) => {
        if (err) {
          reject(err);
        } else {
          const { dispatch } = this.props;
          dispatch({
            type: 'login/getCaptcha',
            payload: values.mobile,
          })
            .then(resolve)
            .catch(reject);
        }
      });
    });

  handleSubmit = (err, values) => {
    const { type } = this.state;
    if (!err) {
      const { dispatch } = this.props;
      dispatch({
        type: 'login/login',
        payload: {
          ...values,
          type,
        },
      });
    }
  };

  changeAutoLogin = e => {
    this.setState({
      autoLogin: e.target.checked,
    });
  };

  renderMessage = content => (
    <Alert style={{ marginBottom: 24 }} message={content} type="error" showIcon />
  );

  render() {
    const { login, submitting } = this.props;
    const { type, autoLogin } = this.state;
    return (
      <div className={styles.main}>
        <Login
          defaultActiveKey={type}
          onTabChange={this.onTabChange}
          onSubmit={this.handleSubmit}
          ref={form => {
            this.loginForm = form;
          }}
        >
          <Tab key="account" tab={formatMessage({ id: 'app.login.tab-login-credentials' })}>
            {login.status === 'error' &&
              login.type === 'account' &&
              !submitting &&
              this.renderMessage(formatMessage({ id: 'app.login.message-invalid-credentials' }))}
            {// {tenantMode ? (
            //   <TenantId
            //     name="tenantId"
            //     defaultValue="000000"
            //     placeholder={`${formatMessage({ id: 'app.login.tenantId' })}: 000000`}
            //     rules={[
            //       {
            //         required: true,
            //         message: formatMessage({ id: 'validation.tenantId.required' }),
            //       },
            //     ]}
            //   />
            // ) : null
          }
            <UserName
              name="account"
              defaultValue="admin"
              placeholder={`${formatMessage({ id: 'app.login.userName' })}: admin`}
              rules={[
                {
                  required: true,
                  message: formatMessage({ id: 'validation.userName.required' }),
                },
              ]}
            />
            <Password
              name="password"
              defaultValue="admin"
              placeholder={`${formatMessage({ id: 'app.login.password' })}: admin`}
              rules={[
                {
                  required: true,
                  message: formatMessage({ id: 'validation.password.required' }),
                },
              ]}
              onPressEnter={() => this.loginForm.validateFields(this.handleSubmit)}
            />
            {captchaMode ? <Captcha name="code" mode="image" /> : null}
          </Tab>
          <div>
            <Checkbox checked={autoLogin} onChange={this.changeAutoLogin}>
              <FormattedMessage id="app.login.remember-me" />
            </Checkbox>
            <a style={{ float: 'right' }} href="">
              <FormattedMessage id="app.login.forgot-password" />
            </a>
          </div>
          <Submit loading={submitting}>
            <FormattedMessage id="app.login.login" />
          </Submit>
          <div>
          
          <span className="icon icon-alipay" />
          <span className="icon icon-taobao" />
          <span className="icon icon-weibo" />
          <Link style={{float:"right"}} to="/user/register"><FormattedMessage id="app.login.signup" /></Link>
         
        </div>
        </Login>
      </div>
    );
  }
}

export default LoginPage;
